/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package compilador.analisadorSintatico.classe;

import compilador.analisadorLexico.Token;
import compilador.analisadorLexico.TokenClass;
import compilador.analisadorSintatico.Producao;
import compilador.analisadorSintatico.TokenReader;
import compilador.analisadorSintatico.simboloGramatical.NaoTerminal;
import compilador.analisadorSintatico.simboloGramatical.SimboloGramatical;
import compilador.analisadorSintatico.simboloGramatical.Terminal;

/**
 *
 * @author ubuntu
 */
public class CLASSE extends Producao{
    @Override
    public void setSimbolo() {
        this.simbolo = new NaoTerminal("CLASSE");
    }
        
    @Override
    public SimboloGramatical derivar() throws Exception {
        
        //chama o token reader para correr os tokens
        TokenReader tokenReader = TokenReader.getInstance();

        Token token = null;

        token = tokenReader.seeCurrent();
        //JOptionPane.showMessageDialog(null, token.getTokenClass() + " | "+ token.getAtributo());
        String atributo = token.getAtributo().toString();        
        if (atributo.equals("class")) {

            tokenReader.consome();//avança index
            Terminal t = new Terminal(token);
            ((NaoTerminal) this.simbolo).add(t); //adiciona class à árvore           

        } else {
            erro(this.getClass().getSimpleName() + " mal formada - 'class' não encontrado");
            return this.simbolo;
        }
        
        ((NaoTerminal) this.simbolo).add(new NOME().derivar());
        
        token = tokenReader.seeCurrent();
        if (token.getTokenClass().equals(TokenClass.DELIMITADOR) && token.getAtributo().equals("{")) {

            tokenReader.consome();//avança index
            ((NaoTerminal) this.simbolo).add(new Terminal(token)); //adiciona { à árvore           

        } else {
            erro(this.getClass().getSimpleName() + " mal formada - '{' não encontrado");
            return this.simbolo;
        }
        
        ((NaoTerminal) this.simbolo).add(new EXP_CLASSE().derivar());
        
        token = tokenReader.seeCurrent();
        if (token.getTokenClass().equals(TokenClass.DELIMITADOR) && token.getAtributo().equals("}")) {

            tokenReader.consome();//avança index
            ((NaoTerminal) this.simbolo).add(new Terminal(token)); //adiciona } à árvore           

        } else {
            erro(this.getClass().getSimpleName() + " mal formada - \'}\' não encontrado");
        }
        
        return this.simbolo;
    }
    
    public static void main(String[] arg) throws Exception{
        new CLASSE().derivar();
    }
}
